package com.kipling.kio.core.intf;


public interface KioListener<P extends Packet, R>
{
	/**
	 * 建链后触发本方法，注：建链不一定成功，需要关注参数isConnected
	 * @param isConnected 是否连接成功,true:表示连接成功，false:表示连接失败
	 * @param isReconnect 是否是重连, true: 表示这是重新连接，false: 表示这是第一次连接
	 *
	 */
	void onAfterConnected(boolean isConnected, boolean isReconnect) throws Exception;

	/**
	 * 消息包发送之后触发本方法
	 * @param packet
	 * @param isSentSuccess true:发送成功，false:发送失败
	 *
	 */
	void onAfterSent(P packet, boolean isSentSuccess) throws Exception;

	/**
	 * 解码成功后触发本方法
	 * @param packet
	 * @param sentSize
	 *
	 */
	void onAfterReceived(P packet, int packetSize) throws Exception;

//	/**
//	 * 连接关闭前触发本方法
//	 *
//	 * @param throwable the throwable 有可能为空
//	 * @param remark the remark 有可能为空
//	 * @param isRemove
//	 */
//	void onBeforeClose(Throwable throwable, String remark, boolean isRemove);
	
	/**
	 * 连接关闭前后触发本方法
	 *
	 * @param throwable the throwable 有可能为空
	 * @param remark the remark 有可能为空
	 * @param isRemove 是否是删除
	 */
	void onAfterClose(Throwable throwable, String remark, boolean isRemove) throws Exception;
}
